export const prerender = false; import type { APIRoute } from "astro"; import { eq } from "drizzle-orm"; import { createDb } from "@/db"; import { events, eventTags, markets } from "@/db/schema"; export const GET: APIRoute = async ({ params, locals }) => { const runtime = locals.runtime as { env: { DATABASE_URL: string } }; const db = createDb(runtime.env.DATABASE_URL); const slug = params.slug; if (!slug) { return Response.json({ error: "Missing slug" }, { status: 400 }); } const [event] = await db .select({ id: events.id, slug: events.slug, title: events.title, description: events.description, resolutionSource: events.resolutionSource, active: events.active, closedAt: events.closedAt, startDate: events.startDate, endDate: events.endDate, createdAt: events.createdAt, }) .from(events) .where(eq(events.slug, slug)); if (!event) { return Response.json({ error: "Event not found" }, { status: 404 }); } const [eventMarkets, tags] = await Promise.all([ db .select({ slug: markets.slug, question: markets.question, priceYes: markets.priceYes, poolYes: markets.poolYes, poolNo: markets.poolNo, volume: markets.volume, resolutionCriteria: markets.resolutionCriteria, result: markets.result, active: markets.active, closedAt: markets.closedAt, resolvedAt: markets.resolvedAt, }) .from(markets) .where(eq(markets.eventId, event.id)), db .select({ tag: eventTags.tag }) .from(eventTags) .where(eq(eventTags.eventId, event.id)), ]); return Response.json( { ...event, tags: tags.map((t) => t.tag), markets: eventMarkets }, { headers: { "Cache-Control": "public, s-maxage=15" } }, ); };